home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Color;
- import java.awt.Graphics;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.StreamTokenizer;
-
- class Model3D {
- float[] vert;
- int[] tvert;
- int nvert;
- int maxvert;
- int[] con;
- int ncon;
- int maxcon;
- boolean transformed;
- Matrix3D mat;
- float xmin;
- float xmax;
- float ymin;
- float ymax;
- float zmin;
- float zmax;
- // $FF: renamed from: gr java.awt.Color[]
- static Color[] field_0;
-
- Model3D() {
- this.mat = new Matrix3D();
- this.mat.xrot((double)20.0F);
- this.mat.yrot((double)30.0F);
- }
-
- Model3D(InputStream var1) throws IOException, FileFormatException {
- this();
- StreamTokenizer var2 = new StreamTokenizer(var1);
- var2.eolIsSignificant(true);
- var2.commentChar(35);
-
- label82:
- while(true) {
- switch (var2.nextToken()) {
- case -3:
- if ("v".equals(var2.sval)) {
- double var9 = (double)0.0F;
- double var11 = (double)0.0F;
- double var7 = (double)0.0F;
- if (var2.nextToken() == -2) {
- var9 = var2.nval;
- if (var2.nextToken() == -2) {
- var11 = var2.nval;
- if (var2.nextToken() == -2) {
- var7 = var2.nval;
- }
- }
- }
-
- this.addVert((float)var9, (float)var11, (float)var7);
-
- while(var2.ttype != 10 && var2.ttype != -1) {
- var2.nextToken();
- }
- } else if (!"f".equals(var2.sval) && !"fo".equals(var2.sval) && !"l".equals(var2.sval)) {
- while(var2.nextToken() != 10 && var2.ttype != -1) {
- }
- } else {
- int var3 = -1;
- int var4 = -1;
- int var5 = -1;
-
- while(true) {
- while(var2.nextToken() != -2) {
- if (var2.ttype != 47) {
- if (var3 >= 0) {
- this.add(var3 - 1, var4 - 1);
- }
-
- if (var2.ttype != 10) {
- break label82;
- }
- continue label82;
- }
-
- var2.nextToken();
- }
-
- var5 = (int)var2.nval;
- if (var4 >= 0) {
- this.add(var4 - 1, var5 - 1);
- }
-
- if (var3 < 0) {
- var3 = var5;
- }
-
- var4 = var5;
- }
- }
- case 10:
- break;
- default:
- break label82;
- }
- }
-
- var1.close();
- if (var2.ttype != -1) {
- throw new FileFormatException(var2.toString());
- }
- }
-
- int addVert(float var1, float var2, float var3) {
- int var4 = this.nvert;
- if (var4 >= this.maxvert) {
- if (this.vert == null) {
- this.maxvert = 100;
- this.vert = new float[this.maxvert * 3];
- } else {
- this.maxvert *= 2;
- float[] var5 = new float[this.maxvert * 3];
- System.arraycopy(this.vert, 0, var5, 0, this.vert.length);
- this.vert = var5;
- }
- }
-
- var4 *= 3;
- this.vert[var4] = var1;
- this.vert[var4 + 1] = var2;
- this.vert[var4 + 2] = var3;
- return this.nvert++;
- }
-
- void add(int var1, int var2) {
- int var3 = this.ncon;
- if (var1 < this.nvert && var2 < this.nvert) {
- if (var3 >= this.maxcon) {
- if (this.con == null) {
- this.maxcon = 100;
- this.con = new int[this.maxcon];
- } else {
- this.maxcon *= 2;
- int[] var4 = new int[this.maxcon];
- System.arraycopy(this.con, 0, var4, 0, this.con.length);
- this.con = var4;
- }
- }
-
- if (var1 > var2) {
- int var5 = var1;
- var1 = var2;
- var2 = var5;
- }
-
- this.con[var3] = var1 << 16 | var2;
- this.ncon = var3 + 1;
- }
- }
-
- void transform() {
- if (!this.transformed && this.nvert > 0) {
- if (this.tvert == null || this.tvert.length < this.nvert * 3) {
- this.tvert = new int[this.nvert * 3];
- }
-
- this.mat.transform(this.vert, this.tvert, this.nvert);
- this.transformed = true;
- }
- }
-
- private void sort(int var1, int var2) {
- int[] var3 = this.con;
- int var4 = var1;
- int var5 = var2;
- if (var1 < var2) {
- int var6 = var3[(var1 + var2) / 2];
-
- while(var4 < var5) {
- while(var4 < var5 && var3[var4] < var6) {
- ++var4;
- }
-
- while(var4 < var5 && var3[var5] >= var6) {
- --var5;
- }
-
- if (var4 < var5) {
- int var7 = var3[var4];
- var3[var4] = var3[var5];
- var3[var5] = var7;
- }
- }
-
- if (var5 < var4) {
- var4 = var5;
- }
-
- this.sort(var1, var4);
- this.sort(var4 == var1 ? var4 + 1 : var4, var2);
- }
- }
-
- void compress() {
- int var1 = this.ncon;
- int[] var2 = this.con;
- this.sort(0, this.ncon - 1);
- int var3 = 0;
- int var4 = -1;
-
- for(int var5 = 0; var5 < var1; ++var5) {
- int var6 = var2[var5];
- if (var4 != var6) {
- var2[var3] = var6;
- ++var3;
- }
-
- var4 = var6;
- }
-
- this.ncon = var3;
- }
-
- void paint(Graphics var1) {
- if (this.vert != null && this.nvert > 0) {
- this.transform();
- if (field_0 == null) {
- field_0 = new Color[16];
-
- for(int var2 = 0; var2 < 16; ++var2) {
- int var3 = (int)((double)170.0F * ((double)1.0F - Math.pow((double)var2 / (double)15.0F, 2.3)));
- field_0[var2] = new Color(var3, var3, var3);
- }
- }
-
- int var11 = 0;
- int var12 = this.ncon;
- int[] var4 = this.con;
- int[] var5 = this.tvert;
- if (var12 > 0 && this.nvert > 0) {
- for(int var6 = 0; var6 < var12; ++var6) {
- int var7 = var4[var6];
- int var8 = (var7 >> 16 & '\uffff') * 3;
- int var9 = (var7 & '\uffff') * 3;
- int var10 = var5[var8 + 2] + var5[var9 + 2];
- if (var10 < 0) {
- var10 = 0;
- }
-
- if (var10 > 15) {
- var10 = 15;
- }
-
- if (var10 != var11) {
- var11 = var10;
- var1.setColor(field_0[var10]);
- }
-
- var1.drawLine(var5[var8], var5[var8 + 1], var5[var9], var5[var9 + 1]);
- }
-
- }
- }
- }
-
- void findBB() {
- if (this.nvert > 0) {
- float[] var1 = this.vert;
- float var2 = var1[0];
- float var3 = var2;
- float var4 = var1[1];
- float var5 = var4;
- float var6 = var1[2];
- float var7 = var6;
- int var8 = this.nvert * 3;
-
- while(true) {
- var8 -= 3;
- if (var8 <= 0) {
- this.xmax = var3;
- this.xmin = var2;
- this.ymax = var5;
- this.ymin = var4;
- this.zmax = var7;
- this.zmin = var6;
- return;
- }
-
- float var9 = var1[var8];
- if (var9 < var2) {
- var2 = var9;
- }
-
- if (var9 > var3) {
- var3 = var9;
- }
-
- float var10 = var1[var8 + 1];
- if (var10 < var4) {
- var4 = var10;
- }
-
- if (var10 > var5) {
- var5 = var10;
- }
-
- float var11 = var1[var8 + 2];
- if (var11 < var6) {
- var6 = var11;
- }
-
- if (var11 > var7) {
- var7 = var11;
- }
- }
- }
- }
- }
-